New York City, often called simply New York and abbreviated as NYC, is the most populous city in the United States. With an estimated 2019 population of 8,336,817 distributed over about 302.6 square miles (784 km2), New York is also the most densely populated major city in the United States.Located at the southern tip of the U.S. state of New York, the city is the center of the New York metropolitan area, the largest metropolitan area in the world by urban landmass. With almost 20 million people in its metropolitan statistical area and approximately 23 million in its combined statistical area, it is one of the world's most populous megacities. New York City has been described as the cultural, financial, and media capital of the world, significantly influencing commerce, entertainment, research, technology, education, politics, tourism, art, fashion, and sports. Home to the headquarters of the United Nations, New York is an important center for international diplomacy.
New York City is composed of five boroughs, each of which is a county of the State of New York. The five boroughs — Brooklyn, Queens, Manhattan, the Bronx, and Staten Island — were consolidated into a single city in 1898. The city and its metropolitan area constitute the premier gateway for legal immigration to the United States. As many as 800 languages are spoken in New York, making it the most linguistically diverse city in the world. New York is home to more than 3.2 million residents born outside the United States, the largest foreign-born population of any city in the world as of 2016. Throughout its history, New York City has been a major point of entry for immigrants; the term "melting pot" was coined to describe densely populated immigrant neighborhoods on the Lower East Side.
New York City has the largest population of Italian Americans in the USA as well as North America. New York City is home to the third largest Italian population outside of Italy, behind São Paulo, Brazil and Buenos Aires, Argentina, respectively. Over 1.3 million Italians and Italian-Americans live in the greater New York City metro area, with about 800,000 living within one of the five New York City boroughs. Some of the Italian-American neighborhoods in New York City are -
As part of this project, using the Foursquare APIs, we will analyze the Italian restaurants in the 5 boroughs and its various neighborhoods, rank the borough with the highest rated Italian restaurants and also rank the neighborhoods which have the highest number of Italian restaurants. We will also visualize the neighborhoods in a choropleth map.
For this project we will need the following data :
New York City data that contains list Boroughs, Neighborhoods along with their latitude and longitude. Data source : https://cocl.us/new_york_dataset Description : This data set contains the required information. And we will use this dataset to explore various neighborhoods of New York City.
Italian resturants in each neighborhood of new york city. Data source : Fousquare APIs Description : By using the Foursquare APIs we will get all the venues in each neighborhood. We can filter these venues to get only Italian restaurants.
GeoSpace data Data source : https://data.cityofnewyork.us/City-Government/Borough-Boundaries/tqmj-j8zm Description : By using this Geospace data we will get the New York Borough boundaries that will help us visualize the top rated Italian restaurants in a Choropleth map.
Data Analysis Approach
Questions that can be asked using the above mentioned datasets
What is/are the best Borough(s) and Neighborhood(s) in New York City for Italian Cuisine? Which neighborhoods have potential for opening Italian Restaurants? What are the best neighborhoods to stay in, if I prefer Italian Cuisine?
Analysis We will import the required libraries for Python - pandas and numpy for handling data. request module for using FourSquare API. geopy to get co-ordinates of City of New York. folium to visualize the results on a map
import numpy as np # library to handle data in a vectorized manner
import pandas as pd # library for data analsysis
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
import json # library to handle JSON files
!conda install -c conda-forge geopy --yes # uncomment this line if you haven't completed the Foursquare API lab
from geopy.geocoders import Nominatim # convert an address into latitude and longitude values
import requests # library to handle requests
from pandas.io.json import json_normalize # tranform JSON file into a pandas dataframe
# Matplotlib and associated plotting modules
import matplotlib.cm as cm
import matplotlib.colors as colors
# import k-means from clustering stage
from sklearn.cluster import KMeans
!conda install -c conda-forge folium=0.5.0 --yes # uncomment this line if you haven't completed the Foursquare API lab
import folium # map rendering library
print('Libraries imported.')
CLIENT_ID = 'GQG2AO3KQUJVUJCZWIGFZJVBLEVSMI1CDEEEL5BECXCJ0JHA' # your Foursquare ID
CLIENT_SECRET = 'GUJCP5K44TITQ4XTPYBVXF1QEW52NHVZVITATJJCWQZSB54C' # your Foursquare Secret
VERSION = '20180605' # Foursquare API version
def geo_location(address):
# get geo location of address
geolocator = Nominatim(user_agent="ny_explorer")
location = geolocator.geocode(address)
latitude = location.latitude
longitude = location.longitude
return latitude,longitude
def get_venues(lat,lng):
#set variables
radius=1000
LIMIT=100
#url to fetch data from foursquare api
url = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll={},{}&radius={}&limit={}'.format(
CLIENT_ID,
CLIENT_SECRET,
VERSION,
lat,
lng,
radius,
LIMIT)
# get all the data
results = requests.get(url).json()
venue_data=results["response"]['groups'][0]['items']
venue_details=[]
for row in venue_data:
try:
venue_id=row['venue']['id']
venue_name=row['venue']['name']
venue_category=row['venue']['categories'][0]['name']
venue_details.append([venue_id,venue_name,venue_category])
except KeyError:
pass
column_names=['ID','Name','Category']
df = pd.DataFrame(venue_details,columns=column_names)
return df
def get_venue_details(venue_id):
#url to fetch data from foursquare api
url = 'https://api.foursquare.com/v2/venues/{}?&client_id={}&client_secret={}&v={}'.format(
venue_id,
CLIENT_ID,
CLIENT_SECRET,
VERSION)
# get all the data
results = requests.get(url).json()
venue_data=results['response']['venue']
venue_details=[]
try:
venue_id=venue_data['id']
venue_name=venue_data['name']
venue_likes=venue_data['likes']['count']
venue_rating=venue_data['rating']
venue_tips=venue_data['tips']['count']
venue_details.append([venue_id,venue_name,venue_likes,venue_rating,venue_tips])
except KeyError:
pass
column_names=['ID','Name','Likes','Rating','Tips']
df = pd.DataFrame(venue_details,columns=column_names)
return df
def get_new_york_data():
url='https://cocl.us/new_york_dataset'
resp=requests.get(url).json()
# all data is present in features label
features=resp['features']
# define the dataframe columns
column_names = ['Borough', 'Neighborhood', 'Latitude', 'Longitude']
# instantiate the dataframe
new_york_data = pd.DataFrame(columns=column_names)
for data in features:
borough = data['properties']['borough']
neighborhood_name = data['properties']['name']
neighborhood_latlon = data['geometry']['coordinates']
neighborhood_lat = neighborhood_latlon[1]
neighborhood_lon = neighborhood_latlon[0]
new_york_data = new_york_data.append({'Borough': borough,
'Neighborhood': neighborhood_name,
'Latitude': neighborhood_lat,
'Longitude': neighborhood_lon}, ignore_index=True)
return new_york_data
new_york_data=get_new_york_data()
new_york_data.head()
new_york_data.shape
# Matplotlib and associated plotting modules
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as colors
%matplotlib inline
import matplotlib.pyplot as plt
plt.figure(figsize=(9,5), dpi = 100)
# title
plt.title('Number of Neighborhoods for each Borough in New York City')
#On x-axis
plt.xlabel('Borough', fontsize = 15)
#On y-axis
plt.ylabel('No.of Neighborhoods', fontsize=15)
#giving a bar plot
new_york_data.groupby('Borough')['Neighborhood'].count().plot(kind='bar')
#legend
plt.legend()
#displays the plot
plt.show()
new_york_data_Bronx = new_york_data[new_york_data['Borough'] == 'Bronx']
new_york_data_Brooklyn = new_york_data[new_york_data['Borough'] == 'Brooklyn']
new_york_data_Manhattan = new_york_data[new_york_data['Borough'] == 'Manhattan']
new_york_data_Queens = new_york_data[new_york_data['Borough'] == 'Queens']
new_york_data_Staten_Island = new_york_data[new_york_data['Borough'] == 'Staten Island']
new_york_data_Bronx.shape
new_york_data_Brooklyn.shape
new_york_data_Manhattan.shape
new_york_data_Queens.shape
new_york_data_Staten_Island.shape
# prepare neighborhood list that contains Italian restaurants in Bronx
column_names=['Borough', 'Neighborhood', 'ID','Name']
italian_rest_Bronx=pd.DataFrame(columns=column_names)
count=1
for row in new_york_data_Bronx.values.tolist():
Borough, Neighborhood, Latitude, Longitude=row
venues = get_venues(Latitude,Longitude)
italian_restaurants=venues[venues['Category']=='Italian Restaurant']
print('(',count,'/',len(new_york_data_Bronx),')','Italian Restaurants in '+Neighborhood+', '+Borough+':'+str(len(italian_restaurants)))
for restaurant_detail in italian_restaurants.values.tolist():
id, name , category=restaurant_detail
italian_rest_Bronx = italian_rest_Bronx.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name
}, ignore_index=True)
count+=1
# prepare neighborhood list that contains Italian restaurants in Brooklyn
column_names=['Borough', 'Neighborhood', 'ID','Name']
italian_rest_Brooklyn=pd.DataFrame(columns=column_names)
count=1
for row in new_york_data_Brooklyn.values.tolist():
Borough, Neighborhood, Latitude, Longitude=row
venues = get_venues(Latitude,Longitude)
italian_restaurants=venues[venues['Category']=='Italian Restaurant']
print('(',count,'/',len(new_york_data_Brooklyn),')','Italian Restaurants in '+Neighborhood+', '+Borough+':'+str(len(italian_restaurants)))
for restaurant_detail in italian_restaurants.values.tolist():
id, name , category=restaurant_detail
italian_rest_Brooklyn = italian_rest_Brooklyn.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name
}, ignore_index=True)
count+=1
# prepare neighborhood list that contains Italian restaurants in Manhattan
column_names=['Borough', 'Neighborhood', 'ID','Name']
italian_rest_Manhattan=pd.DataFrame(columns=column_names)
count=1
for row in new_york_data_Manhattan.values.tolist():
Borough, Neighborhood, Latitude, Longitude=row
venues = get_venues(Latitude,Longitude)
italian_restaurants=venues[venues['Category']=='Italian Restaurant']
print('(',count,'/',len(new_york_data_Manhattan),')','Italian Restaurants in '+Neighborhood+', '+Borough+':'+str(len(italian_restaurants)))
for restaurant_detail in italian_restaurants.values.tolist():
id, name , category=restaurant_detail
italian_rest_Manhattan = italian_rest_Manhattan.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name
}, ignore_index=True)
count+=1
# prepare neighborhood list that contains Italian restaurants in Queens
column_names=['Borough', 'Neighborhood', 'ID','Name']
italian_rest_Queens=pd.DataFrame(columns=column_names)
count=1
for row in new_york_data_Queens.values.tolist():
Borough, Neighborhood, Latitude, Longitude=row
venues = get_venues(Latitude,Longitude)
italian_restaurants=venues[venues['Category']=='Italian Restaurant']
print('(',count,'/',len(new_york_data_Queens),')','Italian Restaurants in '+Neighborhood+', '+Borough+':'+str(len(italian_restaurants)))
for restaurant_detail in italian_restaurants.values.tolist():
id, name , category=restaurant_detail
italian_rest_Queens = italian_rest_Queens.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name
}, ignore_index=True)
count+=1
# prepare neighborhood list that contains Italian restaurants in Staten Island
column_names=['Borough', 'Neighborhood', 'ID','Name']
italian_rest_Staten_Island=pd.DataFrame(columns=column_names)
count=1
for row in new_york_data_Staten_Island.values.tolist():
Borough, Neighborhood, Latitude, Longitude=row
venues = get_venues(Latitude,Longitude)
italian_restaurants=venues[venues['Category']=='Italian Restaurant']
print('(',count,'/',len(new_york_data_Staten_Island),')','Italian Restaurants in '+Neighborhood+', '+Borough+':'+str(len(italian_restaurants)))
for restaurant_detail in italian_restaurants.values.tolist():
id, name , category=restaurant_detail
italian_rest_Staten_Island = italian_rest_Staten_Island.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name
}, ignore_index=True)
count+=1
italian_rest_ny = italian_rest_Bronx.append(italian_rest_Brooklyn, ignore_index=True).append(italian_rest_Manhattan, ignore_index=True).append(italian_rest_Queens, ignore_index=True).append(italian_rest_Staten_Island, ignore_index=True)
italian_rest_ny.shape
italian_rest_ny['Borough'].value_counts().sort_values(ascending=False)
plt.figure(figsize=(9,5), dpi = 100)
# title
plt.title('Number of Italian Restaurants for each Borough in New York City')
#On x-axis
plt.xlabel('Borough', fontsize = 15)
#On y-axis
plt.ylabel('No.of Italian Restaurants', fontsize=15)
#giving a bar plot
italian_rest_ny.groupby('Borough')['ID'].count().plot(kind='bar')
#legend
plt.legend()
#displays the plot
plt.show()
italian_rest_ny['Neighborhood'].value_counts().sort_values(ascending=False)
plt.figure(figsize=(9,5), dpi = 100)
# title
plt.title('Number of Italian Restaurants for each Neighborhood in New York City')
#On x-axis
plt.xlabel('Neighborhood', fontsize = 15)
#On y-axis
plt.ylabel('No.of Italian Restaurants', fontsize=15)
#giving a bar plot
italian_rest_ny.groupby('Neighborhood')['ID'].count().nlargest(5).plot(kind='bar')
#legend
plt.legend()
#displays the plot
plt.show()
italian_rest_ny[italian_rest_ny['Neighborhood']=='Belmont']
# prepare neighborhood list that contains italian restaurants in Bronx
column_names=['Borough', 'Neighborhood', 'ID','Name','Likes','Rating','Tips']
italian_rest_stats_Bronx=pd.DataFrame(columns=column_names)
count=1
for row in italian_rest_Bronx.values.tolist():
Borough,Neighborhood,ID,Name=row
try:
venue_details=get_venue_details(ID)
print(venue_details)
id,name,likes,rating,tips=venue_details.values.tolist()[0]
except IndexError:
print('No data available for id=',ID)
# we will assign 0 value for these restaurants as they may have been
#recently opened or details does not exist in FourSquare Database
id,name,likes,rating,tips=[0]*5
print('(',count,'/',len(italian_rest_Bronx),')','processed')
italian_rest_stats_Bronx = italian_rest_stats_Bronx.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name,
'Likes' : likes,
'Rating' : rating,
'Tips' : tips
}, ignore_index=True)
count+=1
# prepare neighborhood list that contains italian restaurants in Brooklyn
column_names=['Borough', 'Neighborhood', 'ID','Name','Likes','Rating','Tips']
italian_rest_stats_Brooklyn=pd.DataFrame(columns=column_names)
count=1
for row in italian_rest_Brooklyn.values.tolist():
Borough,Neighborhood,ID,Name=row
try:
venue_details=get_venue_details(ID)
print(venue_details)
id,name,likes,rating,tips=venue_details.values.tolist()[0]
except IndexError:
print('No data available for id=',ID)
# we will assign 0 value for these restaurants as they may have been
#recently opened or details does not exist in FourSquare Database
id,name,likes,rating,tips=[0]*5
print('(',count,'/',len(italian_rest_Brooklyn),')','processed')
italian_rest_stats_Brooklyn = italian_rest_stats_Brooklyn.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name,
'Likes' : likes,
'Rating' : rating,
'Tips' : tips
}, ignore_index=True)
count+=1
# prepare neighborhood list that contains italian restaurants in Manhattan
column_names=['Borough', 'Neighborhood', 'ID','Name','Likes','Rating','Tips']
italian_rest_stats_Manhattan=pd.DataFrame(columns=column_names)
count=1
for row in italian_rest_Manhattan.values.tolist():
Borough,Neighborhood,ID,Name=row
try:
venue_details=get_venue_details(ID)
print(venue_details)
id,name,likes,rating,tips=venue_details.values.tolist()[0]
except IndexError:
print('No data available for id=',ID)
# we will assign 0 value for these restaurants as they may have been
#recently opened or details does not exist in FourSquare Database
id,name,likes,rating,tips=[0]*5
print('(',count,'/',len(italian_rest_Manhattan),')','processed')
italian_rest_stats_Manhattan = italian_rest_stats_Manhattan.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name,
'Likes' : likes,
'Rating' : rating,
'Tips' : tips
}, ignore_index=True)
count+=1
# prepare neighborhood list that contains italian restaurants in Queens
column_names=['Borough', 'Neighborhood', 'ID','Name','Likes','Rating','Tips']
italian_rest_stats_Queens=pd.DataFrame(columns=column_names)
count=1
for row in italian_rest_Queens.values.tolist():
Borough,Neighborhood,ID,Name=row
try:
venue_details=get_venue_details(ID)
print(venue_details)
id,name,likes,rating,tips=venue_details.values.tolist()[0]
except IndexError:
print('No data available for id=',ID)
# we will assign 0 value for these restaurants as they may have been
#recently opened or details does not exist in FourSquare Database
id,name,likes,rating,tips=[0]*5
print('(',count,'/',len(italian_rest_Queens),')','processed')
italian_rest_stats_Queens = italian_rest_stats_Queens.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name,
'Likes' : likes,
'Rating' : rating,
'Tips' : tips
}, ignore_index=True)
count+=1
# prepare neighborhood list that contains italian restaurants in Staten Island
column_names=['Borough', 'Neighborhood', 'ID','Name','Likes','Rating','Tips']
italian_rest_stats_Staten_Island=pd.DataFrame(columns=column_names)
count=1
for row in italian_rest_Staten_Island.values.tolist():
Borough,Neighborhood,ID,Name=row
try:
venue_details=get_venue_details(ID)
print(venue_details)
id,name,likes,rating,tips=venue_details.values.tolist()[0]
except IndexError:
print('No data available for id=',ID)
# we will assign 0 value for these restaurants as they may have been
#recently opened or details does not exist in FourSquare Database
id,name,likes,rating,tips=[0]*5
print('(',count,'/',len(italian_rest_Staten_Island),')','processed')
italian_rest_stats_Staten_Island = italian_rest_stats_Staten_Island.append({'Borough': Borough,
'Neighborhood': Neighborhood,
'ID': id,
'Name' : name,
'Likes' : likes,
'Rating' : rating,
'Tips' : tips
}, ignore_index=True)
count+=1
italian_rest_stats_ny = italian_rest_stats_Bronx.append(italian_rest_stats_Brooklyn,ignore_index=True).append(italian_rest_stats_Manhattan,ignore_index=True).append(italian_rest_stats_Queens,ignore_index=True).append(italian_rest_stats_Staten_Island,ignore_index=True)
italian_rest_stats_Bronx.shape
italian_rest_stats_Bronx
italian_rest_stats_Brooklyn.shape
italian_rest_stats_Brooklyn
italian_rest_stats_Manhattan.shape
italian_rest_stats_Manhattan
italian_rest_stats_Queens.shape
italian_rest_stats_Queens
italian_rest_stats_Staten_Island.shape
italian_rest_stats_Staten_Island
italian_rest_stats_ny.shape
italian_rest_stats_ny.to_csv('italian_rest_stats_ny.csv', index=False)
# verify the data in csv
italian_rest_stats_ny_csv=pd.read_csv('italian_rest_stats_ny.csv')
italian_rest_stats_ny_csv.shape
italian_rest_stats_ny_csv.head()
italian_rest_stats_ny.info()
# convert likes to float
italian_rest_stats_ny['Likes']=italian_rest_stats_ny['Likes'].astype('float64')
# convert Tips to float
italian_rest_stats_ny['Tips']=italian_rest_stats_ny['Tips'].astype('float64')
# convert Rating to float
italian_rest_stats_ny['Rating']=italian_rest_stats_ny['Rating'].astype('float64')
italian_rest_stats_ny.info()
italian_rest_stats_ny.iloc[italian_rest_stats_ny['Likes'].idxmax()]
italian_rest_stats_ny.iloc[italian_rest_stats_ny['Rating'].idxmax()]
italian_rest_stats_ny.iloc[italian_rest_stats_ny['Tips'].idxmax()]
ny_neighborhood_stats=italian_rest_stats_ny.groupby('Neighborhood',as_index=False).mean()[['Neighborhood','Rating']]
ny_neighborhood_stats.columns=['Neighborhood','Average Rating']
ny_neighborhood_stats.sort_values(['Average Rating'],ascending=False).head(10)
ny_borough_stats=italian_rest_stats_ny.groupby('Borough',as_index=False).mean()[['Borough','Rating']]
ny_borough_stats.columns=['Borough','Average Rating']
ny_borough_stats.sort_values(['Average Rating'],ascending=False)
plt.figure(figsize=(9,5), dpi = 100)
# title
plt.title('Average rating of Italian Restaurants for each Borough')
#On x-axis
plt.xlabel('Borough', fontsize = 15)
#On y-axis
plt.ylabel('Average Rating', fontsize=15)
#giving a bar plot
italian_rest_stats_ny.groupby('Borough').mean()['Rating'].plot(kind='bar')
#legend
plt.legend()
#displays the plot
plt.show()
ny_neighborhood_stats=ny_neighborhood_stats[ny_neighborhood_stats['Average Rating']>=8.5]
ny_neighborhood_stats
ny_neighborhood_stats.shape
ny_neighborhood_stats=pd.merge(ny_neighborhood_stats,new_york_data, on='Neighborhood')
ny_neighborhood_stats
ny_neighborhood_stats.shape
ny_neighborhood_stats=ny_neighborhood_stats[['Borough','Neighborhood','Latitude','Longitude','Average Rating']]
ny_neighborhood_stats.sort_values(by=['Average Rating'], ascending=False, inplace=True)
ny_neighborhood_stats
ny_map = folium.Map(location=geo_location('New York'), zoom_start=12)
# instantiate a feature group for the restaurants in the dataframe
restaurants = folium.map.FeatureGroup()
# loop through the 100 crimes and add each to the restaurants feature group
for lat, lng, in ny_neighborhood_stats[['Latitude','Longitude']].values:
restaurants.add_child(
folium.CircleMarker(
[lat, lng],
radius=10, # define how big you want the circle markers to be
color='red',
fill=True,
fill_color='blue',
fill_opacity=0.6
)
)
ny_neighborhood_stats['Label']=ny_neighborhood_stats['Neighborhood']+', '+ny_neighborhood_stats['Borough']+'('+ny_neighborhood_stats['Average Rating'].map(str)+')'
# add pop-up text to each marker on the map
for lat, lng, label in ny_neighborhood_stats[['Latitude','Longitude','Label']].values:
folium.Marker([lat, lng], popup=label).add_to(ny_map)
# add restaurnts to map
ny_map.add_child(restaurants)
ny_geo = r'Borough Boundaries.geojson'
ny_map.choropleth(
geo_data=ny_geo,
data=ny_borough_stats,
columns=['Borough', 'Average Rating'],
key_on='feature.properties.boro_name',
fill_color='YlOrRd',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='Average Rating'
)
# display map
# as this is huge map data , we will save it to a file
ny_map.save('borough_rating.html')
ny_map
Nearly 550 Italian restaurants have been identified, dotted across all 5 Boroughs. Whilst Manhattan boasts the most number of Italian Restaurants (138),
there's a fairly even spread of restaurants amongst all the Boroughs.
Borough No. of Italian Restaurants
Manhattan 138
Brooklyn 114
Queens 106
Staten Island 104
Bronx 86
In terms of Neighborhoods, the following have the most number of Italian Restaurants and can be considered by visitors who prefer Italian cuisine for staying,
while in NYC
Neighborhood Number of Italian Restaurants
Belmont 15
Greenwich Village 11
Fordham 10
West Village 10
Carroll Gardens 7
Old Town 7
Upper East Side 7
Dongan Hills 7
Hunters Point 7
Soho 7
Neighborhoods that have the most highly rated (Rating >=9) Italian Restaurants are
Neighborhood Average Rating of Italian Restaurants
Downtown 9.10
Boerum Hill 9.10
Emerson Hill 9.10
Bushwick 9.05
Central Harlem 9.00
Greenpoint 9.00
Manhattan has the highest average rating of Italian Restaurants and Staten Island has the least average rating.
Borough Average Rating
Manhattan 8.61
Brooklyn 7.77
Bronx 7.46
Queens 7.17
Staten Island 6.00
This indicates that opening up a high quality Italian Restaurant in Staten Island could be a good business proposition.
Limitations
The ranking of Italian Restaurants is solely based on the users rating in FourSquare
The accuracy of the analysis depends on the data provided by FourSquare